package org.usmile.algorithms.leetcode.simple;

import java.util.ArrayList;
import java.util.List;

/**
 * 1002. 查找共用字符
 *
 * 给你一个字符串数组 words ，请你找出所有在 words 的每个字符串中都出现的共用字符（ 包括重复字符），并以数组形式返回。你可以按 任意顺序 返回答案。
 *
 * 示例 1：
 *
 * 输入：words = ["bella","label","roller"]
 * 输出：["e","l","l"]
 * 示例 2：
 *
 * 输入：words = ["cool","lock","cook"]
 * 输出：["c","o"]
 *
 * 提示：
 *
 * 1 <= words.length <= 100
 * 1 <= words[i].length <= 100
 * words[i] 由小写英文字母组成
 */
public class _1002 {
}

class _1002_Solution {
    public List<String> commonChars(String[] words) {
        int[] count = new int[26];
        for (char c : words[0].toCharArray()) {
            count[c - 'a']++;
        }
        for (int i = 1; i < words.length; i++) {
            int[] current = new int[26];
            for (char c : words[i].toCharArray()) {
                current[c - 'a']++;
            }

            for (int j = 0; j < 26; j++) {
                count[j] = Math.min(count[j], current[j]);
            }
        }

        List<String> result = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            if (count[i] > 0) {
                int freq = count[i];
                char c = (char) (i + 'a');
                String common = c + "";
                for (int j = 0; j < freq; j++) {
                    result.add(common);
                }
            }
        }

        return result;
    }
}